package com.wits.media;

import android.view.SurfaceHolder;

import com.wits.av.MFormat;
import com.wits.av.MediaSink;
import com.wits.av.PsCasterListener;

/**
 * Created by zhengboyuan on 2018-03-12.
 */

public interface PsCamera {

    /// RTP/UDP 协议
    static final int PROTOCOL_RTP_UDP = 3;

    /// RTP/TCP 协议
    static final int PROTOCOL_RTP_TCP = 4;


    /**
     * 设置媒体格式, 在调用 start 之前调用
     * @param fmt
     * @return
     */
    boolean setFormat(MFormat fmt);

    /// 获取当前的媒体格式
    MFormat getFormat();

    /**
     * 设置OSD
     * @param index       序号, 取值为 [0, OsdOverlay.MAX_COUNT]
     * @param overlay
     * @return
     */
    boolean setOsd(int index, OsdOverlay overlay);

    /**
     * 清理OSD
     */
    void clearOsd();


    /**
     * 设置协议传输参数
     * @param protocol  传输协议, @see PROTOCOL_RTP_UDP, PROTOCOL_RTP_TCP
     * @param payload   载体
     * @param ssrc      同步源SSRC
     * @param esMode    true 表示使用RTP传输ES流, 否则传输PS流
     */
    void setProtocol(int protocol, int payload, int ssrc, boolean esMode);

    /**
     * 设置网络发送目的地
     * @param ip    IP地址
     * @param port  端口
     */
    void setDestination(String ip, int port);

    /**
     * 打开摄像头
     * start 之前调用
     * @param cameraId  摄像头标识
     * @return true 表示成功
     */
    boolean open(int cameraId, SurfaceHolder surfaceHolder);

    /**
     * 关闭
     * stop 之后调用
     */
    void close();

    /**
     * 开始编码推送
     * @return
     */
    boolean start();

    /**
     * 停止编码推送
     */
    void stop();

    /**
     * 是否已经启动
     * @return
     */
    boolean isStarted();

    /**
     * 设置摄像头旋转
     * 依赖 Camera 的实现
     * @param rotation  度数, 取值为: 90,180,270
     */
    void setRotation(int rotation);

    /**
     * 设置显示旋转
     * 依赖 Camera 的实现
     * @param degree    度数, 取值为: 90,180,270
     */
    void setDisplayOrientation(int degree);

    /**
     * 设置媒体包回调
     * @param sink
     */
    void setMediaSink(MediaSink sink);

    void setCasterEventCallback(PsCasterListener listener);

}
